package com.eshop.eshopmanagersystem.dal;

import com.eshop.eshopmanagersystem.idal.IManagerDAL;
import com.eshop.eshopmanagersystem.model.BarcodeInfo;
import com.eshop.eshopmanagersystem.unti.Pager;
import com.eshop.eshopmanagersystem.unti.PagerData;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 后端管理数据实现层
 */

@Service
public class ManagerDAL {

    @Autowired
    IManagerDAL imdal;

    /**
     * 加载分页数据，查询所有
     * 参数1：currentPage
     * 参数2：pageSize
     */
    public List<BarcodeInfo> getProductByPager(Pager pager){
        Integer currentPage = pager.getCurrentPage();
        Integer startIndex = (currentPage-1)*pager.getPageSize();
        pager.setStartIndex(startIndex);

        return imdal.getProductByPager(pager);
    }

    /**
     * 封装分页数据方法
     * currentPage,pageSize
     */
    public PagerData getProductDataByPager(Pager pager){
        //调用工具栏存储分页数据信息
        PagerData pagerdata=new PagerData();
        pagerdata.setData(getProductByPager(pager));
        pagerdata.setPageTotal(getPageTotal(pager));
        return pagerdata;
    }

    /**
     * 后台管理端封装方法
     * 计算产品分页
     * 返回值：pageTotal
     */
    public Integer getPageTotal(Pager pager){
        Integer productTotalNumber=getProductTotalNumber();
        Integer pageTotal = 1;
        //数据总条数除以pageSize，如果有余数也不能整除，页数+1
        //可以整除，页数=数据总条/pageSize
        pageTotal = productTotalNumber/pager.getPageSize();
        if(productTotalNumber%pager.getPageSize()>0){
            pageTotal=pageTotal+1;
        }
        return pageTotal;
    }


    /**
     * 封装分页数据方法（带搜索条件）
     * 参数: name,currentPage,pageSize
     */
    public PagerData getProductDataByPagerAndKeyname(Pager pager){
        //调用封装的好方法进行数据装载
        PagerData pagerdata=new PagerData();
        pagerdata.setData(getProductByPagerAndKeyname(pager));
        pagerdata.setPageTotal(getPageTotalByKeyname(pager));
        return pagerdata;
    }


    /**
     * 分页功能：查询数据总条数用来计算页码
     */
    public Integer getProductTotalNumber(){
        return imdal.getProductTotalNumber();
    }




    /**
     * 带条件查询的分页功能（带搜索条件）
     * 关键字 name
     */
    public List<BarcodeInfo> getProductByPagerAndKeyname(Pager pager){
        Integer currentPage = pager.getCurrentPage();
        Integer startIndex = (currentPage-1)*pager.getPageSize();
        pager.setStartIndex(startIndex);
        return imdal.getProductByPagerAndKeyname(pager);
    }

    /**
     * 带条件查询的分页功能（带搜索条件）
     * 关键字 name
     * 计算分页页数
     */
    public Integer getProductTotalNumberByKeyname(Pager pager){
        return imdal.getProductTotalNumberByKeyname(pager);
    }





    /**
     *
     *  后台管理系统封装方法（带搜索条件）
     *  计算带搜索条件的计算分页页数的方法
     *
     */
    public  Integer getPageTotalByKeyname(Pager pager){
        Integer productTotalNumber=getProductTotalNumberByKeyname(pager);
        Integer pageTotal = 1;
        //数据总条数除以pageSize，如果有余数也不能整除，页数+1
        //可以整除，页数=数据总条/pageSize
        pageTotal = productTotalNumber/pager.getPageSize();
        if(productTotalNumber%pager.getPageSize()>0){
            pageTotal=pageTotal+1;
        }
        return pageTotal;
    }


    /**
     * 更新产品列表表单数据
     *
     */
    public boolean editProductById(BarcodeInfo barcodeinfo){
        if(imdal.editProductById(barcodeinfo)>0){
            return true;
        }else {
            return false;
        }
    }

    /**
     * 添加商品时，自动验证产品是否存在
     * 异步实现
     * 参数：barcode
     * 返回类型boolean
     */
    public boolean validateProductIsExist(BarcodeInfo barcodeInfo){
        if(imdal.validateProductIsExist(barcodeInfo)>0){
            //数据已经存在
            return true;
        }else{
            //数据不存在
            return false;
        }
    }

    /**
     * 添加商品
     * 添加成功返回true / 添加失败返回false
     */
    public boolean addProduct(BarcodeInfo barcodeInfo){
        if(imdal.addProduct(barcodeInfo)>0){
            return true;
        }else{
            return false;
        }
    }

    /**
     *  产品列表管理
     *  批量删除商品
     *  参数：id的集合
     *  删除成功返回true / 删除失败返回false
     */
    public boolean deleteProduct(BarcodeInfo barcodeInfo){
        if(imdal.deleteProduct(barcodeInfo)>0){
            //删除成功
            return true;
        }else{
            return false;
        }
    }
}
